from django.db import models
# 无需定义 id，由django自动生成 id = models.AutoFild(primary_key=true)
# Create your models here.

class BookManager(models.Manager):
    # 1. 改变查询的结果集
    def all(self):
        # 调用父类的all方法，获取所有数据
        books = super().all()
        books = books.filter(is_del=False)
        # 返回没有被删除的书籍数据
        return books

    # 2. 封装函数：操作模型类对应的数据表
    def create_book(self,name,pub_date):
        book = self.model()
        book.name = name
        book.pub_date = pub_date
        book.save()
        return book


class Book(models.Model):
    name = models.CharField(max_length=20)
    pub_date = models.DateField()
    is_del = models.BooleanField(default=False)
    objects = BookManager()

class Hero(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    # 关系属性：建立用户类和评论类之间一对多的关系
    book = models.ForeignKey(Book,on_delete=models.CASCADE) # 关系属性对应的表的字段名格式：关系属性名_id


# 自关联
class Area(models.Model):
    title = models.CharField(verbose_name="标题",max_length=20) # verbose_name="标题" ：后台管理(指定atitle的名称)
    parent = models.ForeignKey('self',on_delete=models.CASCADE,null=True,blank=True)

    # 重新str方法 让后台管理 看到具体的Area数据库的城市信息
    def __str__(self):
        return self.title
    def atitle(self):
        return self.title
    atitle.admin_order_field = 'title' # 后台管理：指定atitle排序的规则
    atitle.short_description = '地区名称' # 后台管理：指定atitle的名称（列标题）
    
    def parentTitle(self):
        if self.parent is None:
            return '-'
        return self.parent.title
    parentTitle.short_description = "父级地区名称"

class Card(models.Model):
    class Meta:
        db_table = "card"